# Makefile

# ========================
# 1. 编译器设置
# ========================
# 如果你在为嵌入式系统交叉编译，请将 `gcc` 替换为你的交叉编译器，例如 `arm-none-eabi-gcc`
CC = gcc

# ========================
# 2. 编译选项
# ========================
# 这里的选项适用于大多数情况，可以根据需要调整
CFLAGS = -O2 -g

# 如果是交叉编译，可能需要添加特定的编译器选项，例如目标架构
# 例如，对于 ARM Cortex-M 系列:
# CFLAGS += -mcpu=cortex-m4 -mthumb

# ========================
# 3. 链接选项
# ========================
LDFLAGS =

# 如果是嵌入式系统，可能需要链接特定的库或使用特定的链接脚本
# 例如:
# LDFLAGS += -T linker_script.ld

# ========================
# 4. 源文件和目标文件
# ========================
# 定义所有的源文件
SRCS = _alloc.c test.c

# 将源文件名转换为目标文件名
OBJS = $(SRCS:.c=.o)

# 定义最终生成的可执行文件名
TARGET = malloc_test

# ========================
# 5. 默认目标
# ========================
all: $(TARGET)

# ========================
# 6. 链接步骤
# ========================
# 生成最终的可执行文件
$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $^

# ========================
# 7. 编译步骤
# ========================
# 编译每个 .c 文件为 .o 文件
%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# ========================
# 8. 清理步骤
# ========================
# 删除所有生成的目标文件和可执行文件
clean:
	rm -f $(OBJS) $(TARGET)

# ========================
# 9. 伪目标
# ========================
# 声明伪目标，防止与文件名冲突

test: $(TARGET)
	./$(TARGET)
	
.PHONY: all clean
